﻿// 4955. 牌堆.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


/*
https://www.acwing.com/problem/content/4958/

有 n
 张纸牌，编号 1∼n
。

其中，第 i
 张纸牌的价值为 vi
。

你要玩一个游戏，具体流程如下：

首先，你要将 n
 张牌一张叠一张地堆成一个牌堆，牌堆中纸牌的具体排列顺序由你决定。

接下来，你需要依次进行 m
 次操作。

关于第 i
 次操作：

你的任务是将编号为 ai
 的纸牌从牌堆中抽出，并置于牌堆顶部。
如果执行此次操作时，不存在纸牌位于纸牌 ai
 之上，即纸牌 ai
 本来就位于牌堆顶部，则此次操作无需付出任何代价。
如果执行此次操作时，存在纸牌位于纸牌 ai
 之上，则此次操作需要付出代价，具体代价为所有位于纸牌 ai
 之上的纸牌的价值之和（不要将价值和编号混淆）。
请你合理安排初始时牌堆中的纸牌排列顺序，从而使得执行完所有操作需要付出的总代价尽可能小。

输出总代价的最小可能值。

例如，如果一共有 3
 张纸牌，价值分别为 1,2,3
，一共需要进行 5
 次操作，每次操作需要置于牌堆顶部的卡牌分别为 1,3,2,3,1
。

那么一种最佳的初始时牌堆中纸牌排列顺序为从上到下依次为纸牌 1,3,2
。

具体操作过程如下：

第 1
 次操作，需要将纸牌 1
 置于牌堆顶部，由于纸牌 1
 本来就在牌堆顶部，因此，所需代价为 0
，执行完此次操作后，牌堆中纸牌排列顺序仍为 1,3,2
。
第 2
 次操作，需要将纸牌 3
 置于牌堆顶部，由于纸牌 1
 位于纸牌 3
 之上，因此，所需代价为 v1=1
，执行完此次操作后，牌堆中纸牌排列顺序为 3,1,2
。
第 3
 次操作，需要将纸牌 2
 置于牌堆顶部，由于纸牌 1,3
 位于纸牌 2
 之上，因此，所需代价为 v1+v3=4
，执行完此次操作后，牌堆中纸牌排列顺序为 2,3,1
。
第 4
 次操作，需要将纸牌 3
 置于牌堆顶部，由于纸牌 2
 位于纸牌 3
 之上，因此，所需代价为 v2=2
，执行完此次操作后，牌堆中纸牌排列顺序为 3,2,1
。
第 5
 次操作，需要将纸牌 1
 置于牌堆顶部，由于纸牌 2,3
 位于纸牌 1
 之上，因此，所需代价为 v2+v3=5
，执行完此次操作后，牌堆中纸牌排列顺序为 1,3,2
。
付出的总代价为 0+1+4+2+5=12
。

输入格式
第一行包含两个整数 n,m
。

第二行包含 n
 个整数 v1,v2,…,vn
。

第三行包含 m
 个整数 a1,a2,…,am
。

输出格式
一个整数，表示总代价的最小可能值。

数据范围
前 3
 个测试点满足 2≤n≤3
，1≤m≤5
。
所有测试点满足 2≤n≤500
，1≤m≤1000
，1≤vi≤100
，1≤ai≤n
。

输入样例：
3 5
1 2 3
1 3 2 3 1
输出样例：
12
*/
int main()
{
    std::cout << "Hello World!\n";
}

 